home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 April / EnigmA AMIGA RUN 17 (1997)(G.R. Edizioni)(IT)[!][issue 1997-04][EAR-CD].iso / EARCD / comm / cnet / MasterMind.lha / MasterMind < prev    next >
Text File  |  1996-12-21  |  9KB  |  323 lines

  1. /*************************************************************************/
  2. /*                  MasterMind v1.0 for CNet  by Morpheus                */
  3. /*       This game is a conversion of the E! door MastE!rMind v1.1       */
  4. /*************************************************************************/
  5. path='pfiles:MasterMind/'
  6. /*************************************************************************/
  7. options results
  8. tr=transmit
  9. se=sendstring
  10. if ~open('HiScore',path||'MasterMind.data','R') then;do
  11. if ~open('HiScore',path||'MasterMind.data','W') then;do
  12. tr 'Error: Could not create new highscore file!w3'
  13. call quit_game
  14. end
  15. bbsidentify SYSOP
  16. sysop=result
  17. do i=1 for 10
  18. alias.i=sysop
  19. writeln('HiScore',alias.i)
  20. score.i=1100-(i*100)
  21. writeln('HiScore',score.i)
  22. end
  23. close('HiScore')
  24. end
  25. else;do
  26. do i=1 for 10
  27. alias.i=readln('HiScore')
  28. score.i=readln('HiScore')
  29. end
  30. close('HiScore')
  31. end
  32. quit=0
  33. call show_hiscore
  34. do forever
  35. call show_screen
  36. do i=1 for 4
  37. code.i=1+rnd(6)
  38. end
  39. time('R')
  40. move=1
  41. do while move<=10
  42. call get_invoer
  43. call check_invoer
  44. call show_hint(3+2*move)
  45. if zwart=4 then;do
  46. klok=time('E')
  47. klok=delstr(klok,length(klok)-2,3)
  48. call show_win
  49. move=10
  50. end
  51. move=move+1
  52. end
  53. if zwart~=4 then call show_lose
  54. end
  55. exit
  56. rnd:
  57. return (random(1,100,time(s))+random(1,100,time(s))+random(1,100,time(s)))//arg(1)
  58. show_screen:
  59. tr 'f1@6n1    c7ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿'
  60. tr '    ³  c6M a s t E ! r M i n d  c7³'
  61. tr '    ÃÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ´       ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿'
  62. tr '    ³  c61 c7³ c6.... c7³ ±± ±± ±± ±± ³       ³      c6I n s t r u c t i o n s       c7³'
  63. tr '    ³    ÃÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´       ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´'
  64. tr '    ³  c62 c7³ c6.... c7³ ±± ±± ±± ±± ³       ³  c6Use cursor-keys to choose colour  c7³'
  65. tr '    ³    ÃÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´       ³                                    ³'
  66. tr '    ³  c63 c7³ c6.... c7³ ±± ±± ±± ±± ³       ³ c6Press <Enter> or <Space> to select c7³'
  67. tr '    ³    ÃÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´       ³                                    ³'
  68. tr '    ³  c64 c7³ c6.... c7³ ±± ±± ±± ±± ³       ³ c6Press <Del> or <Backspace> to undo c7³'
  69. tr '    ³    ÃÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´       ³                                    ³'
  70. tr '    ³  c65 c7³ c6.... c7³ ±± ±± ±± ±± ³       ³     c6Press <Q> or <Esc> to quit     c7³'
  71. tr '    ³    ÃÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´       ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´'
  72. tr '    ³  c66 c7³ c6.... c7³ ±± ±± ±± ±± ³       ³  c6+ = right colour, right position  c7³'
  73. tr '    ³    ÃÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´       ³                                    ³'
  74. tr '    ³  c67 c7³ c6.... c7³ ±± ±± ±± ±± ³       ³  c6- = right colour, wrong position  c7³'
  75. tr '    ³    ÃÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´       ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ'
  76. tr '    ³  c68 c7³ c6.... c7³ ±± ±± ±± ±± ³'
  77. tr '    ³    ÃÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´           ÚÄÄÄ¿ÚÄÄÄ¿ÚÄÄÄ¿ÚÄÄÄ¿ÚÄÄÄ¿ÚÄÄÄ¿'
  78. tr '    ³  c69 c7³ c6.... c7³ ±± ±± ±± ±± ³           ³c1ÛÛÛc7³³c2ÛÛÛc7³³c3ÛÛÛc7³³c4ÛÛÛc7³³c5ÛÛÛc7³³c6ÛÛÛc7³'
  79. tr '    ³    ÃÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄ´           ³c1ÛÛÛc7³³c2ÛÛÛc7³³c3ÛÛÛc7³³c4ÛÛÛc7³³c5ÛÛÛc7³³c6ÛÛÛc7³'
  80. tr '    ³ c610 c7³ c6.... c7³ ±± ±± ±± ±± ³           ÀÄÄÄÙÀÄÄÄÙÀÄÄÄÙÀÄÄÄÙÀÄÄÄÙÀÄÄÄÙ'
  81. tr '    ÃÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄ´'
  82. tr '    ³  c6Written by /Y\orpheus  c7³'
  83. tr '    ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ'
  84. return
  85. get_invoer:
  86. tr put_cursor2(43,1)
  87. se '30H'
  88. invoer.1=1
  89. i=1
  90. do while i<=5&quit=0
  91. call check_carrier
  92. getchar
  93. key=result
  94. if key='1B'x then;do
  95. checkio
  96. if result='1' then;do
  97. getchar;getchar
  98. key=result
  99. if key='C' then key='6'
  100. if key='D' then key='4'
  101. end
  102. else quit=1
  103. end
  104. else if key='D'x|key='5'|key=' ' then key='0'
  105. select
  106. when upper(key)='Q' then quit=1
  107. when key='0'&i<=4 then;do
  108. k=i
  109. i=i+1
  110. invoer.i=invoer.k
  111. tr put_colour(3+2*move,13+3*i,invoer.i)
  112. se '30H'
  113. end
  114. when key='0'&i=5 then;do
  115. i=i+1
  116. se '43Hc6                               '
  117. se '30H'
  118. end
  119. when key='4'&i<=4 then;do
  120. tr put_cursor1(38+5*invoer.i,invoer.i)
  121. if invoer.i=1 then invoer.i=6
  122. else invoer.i=invoer.i-1
  123. tr put_cursor2(38+5*invoer.i,invoer.i)
  124. se '30H'
  125. end
  126. when key='6'&i<=4 then;do
  127. tr put_cursor1(38+5*invoer.i,invoer.i)
  128. if invoer.i=6 then invoer.i=1
  129. else invoer.i=invoer.i+1
  130. tr put_cursor2(38+5*invoer.i,invoer.i)
  131. se '30H'
  132. end
  133. when (key='08'x|key='7F'x)&i>1 then;do
  134. k=i
  135. i=i-1
  136. invoer.i=invoer.k
  137. tr undo_colour(3+2*move,13+3*k)
  138. tr put_cursor2(38+5*invoer.i,invoer.i)
  139. se '43Hc6                               '
  140. se '30H'
  141. end
  142. otherwise nop
  143. end
  144. if i=5 then;do
  145. tr put_cursor1(38+5*invoer.i,invoer.i)
  146. se '43Hc6Press <Enter> to end this move.'
  147. se '30H'
  148. end
  149. end
  150. if quit=1 then;do
  151. tr put_cursor1(38+5*invoer.i,invoer.i)
  152. call quit_game
  153. end
  154. return
  155. check_invoer:
  156. zwart=0;wit=0
  157. do i=1 for 4
  158. temp.i=code.i
  159. end
  160. do i=1 for 4
  161. if invoer.i=temp.i then;do
  162. zwart=zwart+1
  163. temp.i=0
  164. end
  165. end
  166. if zwart<4 then
  167. do i=1 for 4
  168. if temp.i~=0 then;do
  169. j=0
  170. do while j~=3
  171. idx=((i+j)//4)+1
  172. if invoer.i=temp.idx then;do
  173. wit=wit+1
  174. temp.idx=10
  175. j=3
  176. end
  177. else j=j+1
  178. end
  179. end
  180. end
  181. return
  182. show_hint:
  183. se ''arg(1)';12Hc7'
  184. i=1
  185. do while i<=zwart
  186. se '+'
  187. i=i+1
  188. end
  189. do while i<=(wit+zwart)
  190. se '-'
  191. i=i+1
  192. end
  193. do while i<=4
  194. se ' '
  195. i=i+1
  196. end
  197. se '30H'
  198. return
  199. show_win:
  200. if klok<600 then score=(600-klok)*20
  201. else score=0
  202. score=score+(11-move)*1000
  203. se '50Hc6Congratulations!'
  204. se '45HYou have cracked the code!'
  205. se '48HYour score is: '||score
  206. if score>score.10 then;do
  207. se '48HYou have a high score!'
  208. se '41HPress <Enter> to view high scores.'
  209. end
  210. else se '41HPress <Enter> to start a new game.'
  211. se '30H'
  212. call check_carrier
  213. getchar
  214. key=result
  215. if key='1B'x then;do
  216. checkio
  217. if result='1' then;do
  218. getchar
  219. getchar
  220. end
  221. else call quit_game
  222. end
  223. else if upper(key)='Q' then call quit_game
  224. if score>score.10 then;do
  225. i=1
  226. do while i<=10
  227. if score>score.i then;do
  228. j=10
  229. do while j>i
  230. k=j-1
  231. score.j=score.k
  232. alias.j=alias.k
  233. j=j-1
  234. end
  235. score.i=score
  236. getuser 1
  237. alias.i=result
  238. i=10
  239. end
  240. i=i+1
  241. end
  242. if ~open('HiScore',path||'MasterMind.data','W') then;do
  243. tr 'Error: Could not write to highscore file!w3'
  244. call quit_game
  245. end
  246. do i=1 for 10
  247. writeln('HiScore',alias.i)
  248. writeln('HiScore',score.i)
  249. end
  250. close('HiScore')
  251. call show_hiscore
  252. end
  253. return
  254. show_lose:
  255. se '41Hc6Sorry! You did not crack the code!'
  256. se '42HThe correct code is: c'code.1'ÛÛ c'code.2'ÛÛ c'code.3'ÛÛ c'code.4'ÛÛ'
  257. se '41Hc6Press <Enter> to start a new game.'
  258. se '30H'
  259. call check_carrier
  260. getchar
  261. key=result
  262. if key='1B'x then;do
  263. checkio
  264. if result='1' then;do
  265. getchar
  266. getchar
  267. end
  268. else call quit_game
  269. end
  270. else if upper(key)='Q' then call quit_game
  271. return
  272. quit_game:
  273. bbsidentify name
  274. bbsname=result
  275. se 'f1n3c6'center('Returning to '||bbsname||'...',78)||'n1w3q1'
  276. exit
  277. put_cursor1:
  278. return ''arg(1)'Hc7ÚÄÄÄ¿<5!1³z'arg(2)'   z0c7³<5!1³z'arg(2)'   z0c7³<5!1ÀÄÄÄÙ'
  279. put_cursor2:
  280. return ''arg(1)'Hc3ÉÍÍÍ»<5!1ºz'arg(2)'   z0c3º<5!1ºz'arg(2)'   z0c3º<5!1ÈÍÍͼ'
  281. put_colour:
  282. return ''arg(1)';'arg(2)'Hc'arg(3)'ÛÛ'
  283. undo_colour:
  284. return ''arg(1)';'arg(2)'Hc7±±'
  285. check_carrier:
  286. getcarrier
  287. if result='FALSE' then exit
  288. return
  289. show_hiscore:
  290. tr 'f1@6'
  291. tr ' c7ÛÛc4¿  c7ÛÛc4¿ c7ÛÛÛÛÛc4¿  c7ÛÛÛÛÛc4¿ c7ÛÛÛÛÛÛÛc4¿c7ÛÛÛÛÛÛÛc4¿c7ÛÛc4¿c7ÛÛÛÛÛÛc4¿ c7ÛÛc4¿  c7ÛÛc4¿c7ÛÛc4¿c7ÛÛÛc4¿ c7ÛÛc4¿c7ÛÛÛÛÛÛc4¿'
  292. tr ' c7z6²²²c4z0¿c7z6²²²c4z0³c7z6²²c4z0ÚÄÄc7z6²²c4z0¿c7z6²²c4z0ÚÄÄÄÙ ÀÄc7z6²²c4z0ÚÄÄÙc7z6²²c4z0ÚÄÄÄÄÙc7z6²²c4z0³c7z6²²c4z0ÚÄÄc7z6²²c4z0¿c7z6²²²c4z0¿c7z6²²²c4z0³c7z6²²c4z0³c7z6²²²²c4z0¿c7z6²²c4z0³c7z6²²c4z0ÚÄÄc7z6²²c4z0¿'
  293. tr ' c7z6±±±±±±±c4z0³c7z6±±±±±±±c4z0³Àc7z6±±±±±c4z0¿   c7z6±±c4z0³   c7z6±±±±±c4z0¿  c7z6±±c4z0³c7z6±±±±±±c4z0ÚÙc7z6±±±±±±±c4z0³c7z6±±c4z0³c7z6±±c4z0Úc7z6±±±±c4z0³c7z6±±c4z0³  c7z6±±c4z0³'
  294. tr ' c7z6°°c4z0Úc7z6°c4z0Úc7z6°°c4z0³c7z6°°c4z0ÚÄÄc7z6°°c4z0³ ÀÄÄÄc7z6°°c4z0¿  c7z6°°c4z0³   c7z6°°c4z0ÚÄÄÙ  ÀÄÙc7z6°°c4z0Úc7z6°°c4z0ÚÙ c7z6°°c4z0Úc7z6°c4z0Úc7z6°°c4z0³c7z6°°c4z0³c7z6°°c4z0³Àc7z6°°°c4z0³c7z6°°c4z0³  c7z6°°c4z0³'
  295. tr ' z6  z0³ÀÙz6  z0³z6  z0³  z6  z0³z6      z0ÚÙ  z6  z0³   z6       z0¿z6  z0¿z6  z0³Àz6  z0¿ z6  z0³ÀÙz6  z0³z6  z0³z6  z0³ Àz6  z0³z6      z0ÚÙ'
  296. tr ' ÀÄÙ  ÀÄÙÀÄÙ  ÀÄÙÀÄÄÄÄÄÙ   ÀÄÙ   ÀÄÄÄÄÄÄÙÀÄÙÀÄÙ ÀÄÙ ÀÄÙ  ÀÄÙÀÄÙÀÄÙ  ÀÄÙÀÄÄÄÄÄÙn1'
  297. tr copies(' ',22)||'c6Éc7Í'||copies('c6Íc7Í',16)||'c6»'
  298. tr copies(' ',22)||'c7º                                 º'
  299. tr copies(' ',22)||'c6º           Hc7ic6gc7h c6Sc7cc6oc7rc6ec7s           c6º'
  300. tr copies(' ',22)||'c7º                                 º'
  301. tr copies(' ',22)||'c6Ìc7Í'||copies('c6Íc7Í',16)||'c6¹'
  302. tr copies(' ',22)||'c7º                                 º'
  303. do i=1 for 10
  304. if i//2 then kleur='c6'
  305. else kleur='c7'
  306. tr copies(' ',22)||kleur||'ºc1'||right(i,3)||'. c3'||left(alias.i,21,'.')||'c2'||right(score.i,6)||kleur||' º'
  307. end
  308. tr copies(' ',22)||'c6º                                 º'
  309. tr copies(' ',22)||'c7Èc6Í'||copies('c7Íc6Í',16)||'c7¼'
  310. se 'n1c6'copies(' ',27)||'Press <Enter> to continue '
  311. call check_carrier
  312. getchar
  313. key=result
  314. if key='1B'x then;do
  315. checkio
  316. if result='1' then;do
  317. getchar
  318. getchar
  319. end
  320. else call quit_game
  321. end
  322. else if upper(key)='Q' then call quit_game
  323. return